
//1652.拆炸弹
class Solution {
    public:
        vector<int> decrypt(vector<int>& code, int k) {
            int n=code.size();
            vector<int> ret(n);
            if(k==0) return ret;
    
            else if(k>0)
            {
                //对于k>0的情况，从0位置开始向后使用滑动窗口
                int left=1,right=1,i=0;
                int tmp=0;
                while(i<n)
                {
                    //入窗口
                    while((right+n-left)%n<k)
                    {
                        tmp+=code[right++];
                        right%=n;
                    }
    
                    //调整答案
                    ret[i++]=tmp;
    
                    //出窗口
                    tmp-=code[left++];
                    left%=n;
                }
            }
            else  //k<0
            {
                //从n-1位置向前使用滑动窗口
                int left=n-2,right=n-2,i=n-1;
                int tmp=0;
                while(i>=0)
                {
                    //入窗口
                    while((right+n-left)%n<-k)
                    {
                        tmp+=code[left--];
                        left=(left+n)%n;
                    }
    
                    //调整答案
                    ret[i--]=tmp;
                    //出窗口
                    tmp-=code[right--];
                    right=(right+n)%n;
                }
            }
            return ret;
        }
    };